import 'package:flutter/material.dart';

class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
  // 导航栏显示的标题
  final String title;

  // 标题的颜色 (默认为白色，匹配截图)
  final Color titleColor;

  // 导航栏背景色 (默认为透明，用于配合页面的渐变背景)
  final Color backgroundColor;

  // 导航栏高度
  @override
  final Size preferredSize;

  // 返回按钮点击时的回调函数 (可选)
  final VoidCallback? onBack;

  // 右上角文字 (可选)
  final String? rightText;

  // 右上角文字点击事件 (可选)
  final VoidCallback? onRightTextTap;

  // 右上角自定义Widget (可选)
  final Widget? rightWidget;

  const CustomAppBar({
    super.key,
    required this.title,
    this.titleColor = Colors.white,
    this.backgroundColor = Colors.transparent, // 默认透明
    this.onBack,
    this.rightText,
    this.onRightTextTap,
    this.rightWidget,
  }) : preferredSize = const Size.fromHeight(kToolbarHeight); // 标准 Toolbar 高度

  @override
  Widget build(BuildContext context) {
    // 如果没有提供 onBack 函数，则使用默认的 Navigator.pop
    final backAction = onBack ??
        () {
          if (Navigator.of(context).canPop()) {
            Navigator.pop(context);
          }
        };

    return Container(
      padding: EdgeInsets.only(top: 40),
      color: backgroundColor,
      child: Row(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          // 左侧返回按钮
          InkWell(
            child: Image.asset(
              'assets/images/ic_back.png',
              width: 44,
              height: 44,
            ),
            onTap: backAction,
          ),

          // const SizedBox(width: 8.0),

          // 标题
          Text(
            title,
            style: TextStyle(
              color: titleColor,
              fontSize: 18.0,
              fontWeight: FontWeight.bold,
            ),
          ),

          // 右侧占位符，如果需要居中对齐标题，这里可以不加 Spacer，
          // 但在 Stack 结构中，通常用 Spacer 来确保元素分布。
          // 考虑到原图标题是偏左的，这里使用 Spacer 留出右侧空间。
          const Spacer(),

          // 右上角自定义Widget
          if (rightWidget != null)
            Padding(
              padding: const EdgeInsets.only(right: 16.0),
              child: rightWidget!,
            )
          // 右上角文字按钮
          else if (rightText != null && onRightTextTap != null)
            InkWell(
              onTap: onRightTextTap,
              child: Padding(
                padding: const EdgeInsets.only(right: 16.0),
                child: Text(
                  rightText!,
                  style: const TextStyle(
                    color: Colors.white60,
                    fontSize: 13.0,
                    fontWeight: FontWeight.normal,
                  ),
                ),
              ),
            ),
        ],
      ),
    );
  }
}